home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / dspack / DSPACK231.exe / {app} / Demos / D5 / PlayVideoCap / main.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-11-24  |  1.9 KB  |  76 lines

  1. unit main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  7.   Dialogs, DSUtil, StdCtrls, DSPack, DirectShow9, Menus;
  8.  
  9. type
  10.   TVideoForm = class(TForm)
  11.     FilterGraph: TFilterGraph;
  12.     VideoWindow: TVideoWindow;
  13.     MainMenu1: TMainMenu;
  14.     Devices: TMenuItem;
  15.     Filter: TFilter;
  16.     procedure FormCreate(Sender: TObject);
  17.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  18.   private
  19.     { DΘclarations privΘes }
  20.   public
  21.     { DΘclarations publiques }
  22.     procedure OnSelectDevice(sender: TObject);
  23.   end;
  24.  
  25. var
  26.   VideoForm: TVideoForm;
  27.   SysDev: TSysDevEnum;
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. procedure TVideoForm.FormCreate(Sender: TObject);
  33. var
  34.   i: integer;
  35.   Device: TMenuItem;
  36. begin
  37.   SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
  38.   if SysDev.CountFilters > 0 then
  39.     for i := 0 to SysDev.CountFilters - 1 do
  40.     begin
  41.       Device := TMenuItem.Create(Devices);
  42.       Device.Caption := SysDev.Filters[i].FriendlyName;
  43.       Device.Tag := i;
  44.       Device.OnClick := OnSelectDevice;
  45.       Devices.Add(Device);
  46.     end;
  47. end;
  48.  
  49. procedure TVideoForm.OnSelectDevice(sender: TObject);
  50. var
  51.   CaptureGraph: ICaptureGraphBuilder2;
  52.   SourceFilter, DestFilter: IBaseFilter;
  53. begin
  54.   FilterGraph.ClearGraph;
  55.   FilterGraph.Active := false;
  56.   Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
  57.   FilterGraph.Active := true;
  58.   FilterGraph.QueryInterface(ICaptureGraphBuilder2, CaptureGraph);
  59.   Filter.QueryInterface(IBaseFilter, SourceFilter);
  60.   VideoWindow.QueryInterface(IBaseFilter, DestFilter);
  61.   CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);
  62.   FilterGraph.Play;
  63.   CaptureGraph := nil;
  64.   SourceFilter := nil;
  65.   DestFilter   := nil;
  66. end;
  67.  
  68. procedure TVideoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  69. begin
  70.   SysDev.Free;
  71.   FilterGraph.ClearGraph;
  72.   FilterGraph.Active := false;
  73. end;
  74.  
  75. end.
  76.